% 利用结构化编程方式提取图像“bt.bmp”的边缘，要求在同一窗口内显示原图像和轮廓图像，
% 实验图像分别命名为“原始图像”和“边缘提取图像”；

close all; clear; clc;
I = imread('bt.bmp');
[m, n] = size(I);
Edge_img = zeros(m,n);
for i = 2:m-1
    for j = 2:n-1
        if I(i,j) == 0  %black
            Edge_img(i,j)=0;
        elseif I(i-1 : i+1, j-1 : j+1) == 1
            Edge_img(i,j) = 0;
        else
            Edge_img(i,j) = 1;
        end
    end
end
subplot(121); imshow(I),title('原始图像');
subplot(122); imshow(Edge_img),title('边缘提取图像');
%% 函数调用
close all; clear; clc;
I = imread('bt.bmp');% 读取图像
imshow(I);

BW1 = edge(I,'roberts');   %进行Roberts算子边缘检测，门限值采用matlab默认值
BW2 = edge(I,'prewitt');   %进行Prewitt算子边缘检测，门限值采用matlab默认值
BW3 = edge(I,'sobel');    %进行Sobel算子边缘检测，门限值采用matlab默认值
figure,imshow(BW1);
figure,imshow(BW2);
figure,imshow(BW3); 

